package object

import (
	"time"

	"bilinadmin/internal/model"
)

// EmployeeInfo 用户信息
type EmployeeInfo struct {
	// 员工id
	EmpId int64 `json:"emp_id"`
	// 品牌id
	BrandId int64 `json:"brand_id"`
	// 统一账号id
	AccountId string `json:"account_id"`
	// 手机号
	Mobile string `json:"mobile"`
	// 邮箱
	Email string `json:"email"`
	// 姓名
	Name string `json:"name"`
	// 入职日期
	EntryDate time.Time `json:"entry_date"`
	// 角色 id
	RoleId int64 `json:"role_id"`
	// 角色名
	RoleName string `json:"role_name"`
	// 状态
	Status string `json:"status"`
	// 仓库列表
	InventoryIds []int64 `json:"inventory_ids"`
}

// NewEmployeeInfo 新建员工信息
func NewEmployeeInfo(empId, brandId int64, name, accountId, mobile, email string, entryDate time.Time) *EmployeeInfo {
	return &EmployeeInfo{
		EmpId:     empId,
		BrandId:   brandId,
		Name:      name,
		AccountId: accountId,
		Mobile:    mobile,
		Email:     email,
		EntryDate: entryDate,
	}
}

func (e *EmployeeInfo) AddRole(roleId int64, roleName string) {
	e.RoleId = roleId
	e.RoleName = roleName
}

func (e *EmployeeInfo) AddInvetory(invs []int64) {
	e.InventoryIds = invs
}

// AccountInfo 统一账号返回基本信息
type AccountInfo struct {
	GID      string `json:"g_id"`
	Mobile   string `json:"mobile"`
	Email    string `json:"email"`
	UserName string `json:"user_name"`
	Modified int64  `json:"modified"`
	Status   string `json:"status"`
}

// EmpVisitInfo 员工信息访问暂存信息
type EmpVisitInfo struct {
	BrandId int64 `json:"brand_id"`
	StoreId int64 `json:"store_id"`
	EmpId   int64 `json:"emp_id"`
}

// OpSimpleInfo 运营简要信息
type OpSimpleInfo struct {
	// 运营id
	OpId int64 `json:"op_id" sql:"op_id"`
	// 员工id
	EmpId int64 `json:"emp_id" sql:"emp_id"`
	// 姓名
	Name string `json:"name" sql:"name"`
	// 手机号
	Mobile string `json:"mobile" sql:"mobile"`
	// 状态 inviting~邀请中，valid~正常，invalid~失效（离职)
	Status int8 `json:"status" sql:"status"`
	// 角色id
	RoleId int64 `json:"role_id" sql:"role_id"`
	// 角色名
	RoleName string `json:"role_name" sql:"role_name"`
}

func (op *OpSimpleInfo) GetStatus() string {
	switch op.Status {
	case model.OpStatusInviting:
		return model.OpStatusInvitingStr
	case model.OpStatusValid:
		return model.OpStatusValidStr
	case model.OpStatusInvalid:
		return model.OpStatusInvalidStr
	default:
		return ""
	}
}

// BrandOperator 品牌运营
type BrandOperator struct {
	// 品牌id
	BrandId int64 `json:"brand_id"`
	// 品牌名
	BrandName string `json:"brand_name"`
	// 是否超级管理员
	IsSuperAdmin bool `json:"is_super_admin"`
	// 是否是管理员
	IsAdmin bool `json:"is_admin"`
	// 角色id
	RoleId int64 `json:"role_id"`
	// 角色名
	RoleName string `json:"role_name"`
	// 权限列表（超管和管理员权限列表为空）
	Permissions []string `json:"permissions"`
}

// StoreOperator 门店运营
type StoreOperator struct {
	// 门店id
	StoreId int64 `json:"store_id"`
	// 门店名
	StoreName string `json:"store_name"`
	// 是否超级管理员
	IsSuperAdmin bool `json:"is_super_admin"`
	// 是否是管理员
	IsAdmin bool `json:"is_admin"`
	// 角色id
	RoleId int64 `json:"role_id"`
	// 角色名
	RoleName string `json:"role_name"`
	// 权限列表（超管和管理员权限列表为空）
	Permissions []string `json:"permissions"`
}

// EmpOperator 员工运营信息
type EmpOperator struct {
	// 员工id
	EmpId int64 `json:"emp_id"`
	// 员工名
	EmpName string `json:"emp_name"`
	// 品牌运营
	BrandOperator *BrandOperator `json:"brand_operator"`
	// 门店运营
	StoreOperators []*StoreOperator `json:"store_operators"`
}
